/**
 * работающая программа для создания базы данных SQLite
 * @file testsqlite.cpp
 * @author Казаков А.В.
 * @date 26.08.2012 
 */
#include <QtGui/QApplication>
#include <stdlib.h>
#include <iostream>
#include <QString>
#include <QWidget>
#include <list>
#include <QtSql>

#define	MAX_CHAR_STR	400
#define	MAX_CHAR_ANN	1200

/**	имя таблицы	*/
#define	S_TABLENAME		"literature"
/**	столбец индекса	*/
#define	S_ID			"id"
/**	заголовок	*/
#define	S_TITLE			"title"
/**	автор	*/
#define	S_AUTHOR		"author"
/**	имя файла	*/
#define	S_FILENAME		"file"
/*	дата добавления в базу	*/
#define	S_ADDDATE		"add_date"
/**	дата опубликования	*/
#define	S_PUBLICDATE	"public_date"
/**	аннотация	*/
#define	S_ANNOTATION	"annotation"
/**	область	*/
#define	S_SPHERE		"sphere"
/**	подобласть	*/
#define	S_FIELD			"field"
/**	источник	*/
#define	S_SOURCE		"source"
/**	путь к файлу	*/
#define	S_FILEPATH		"path"

int main(int argc, char** argv)
{
	QApplication app(argc, argv);

	std::cout << "%SUITE_STARTING% databasemonitor_test" << std::endl;
	std::cout << "%SUITE_STARTED%" << std::endl;

	QSqlDatabase	db = QSqlDatabase::addDatabase("QSQLITE");

	db.setDatabaseName(QString("test_sqlite.db"));

	db.open();

	QString	strRequest;

	strRequest.sprintf("create table %s "
					   "(%s integer primary key, "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d), "
					   "%s varchar(%d));",
					   S_TABLENAME, S_ID,
					   S_TITLE, 400/*MAX_CHAR_STR*/,
					   S_AUTHOR, 400/*MAX_CHAR_STR*/,
					   S_ANNOTATION, 1200/*MAX_CHAR_ANN*/,
					   S_PUBLICDATE, 400/*MAX_CHAR_STR*/,
					   S_ADDDATE, 400/*MAX_CHAR_STR*/,
					   S_SOURCE, 400/*MAX_CHAR_STR*/,
					   S_SPHERE, 400/*MAX_CHAR_STR*/,
					   S_FIELD, 400/*MAX_CHAR_STR*/,
					   S_FILENAME, 400/*MAX_CHAR_STR*/,
					   S_FILEPATH, 400/*MAX_CHAR_STR*/);

	QSqlQuery	query;

	if(!query.exec(strRequest))
	{
		std::cout << "create error" << std::endl;
		std::cout << query.lastError().text().toStdString() << std::endl;
		//	errorType = QSqlError::StatementError
		QString	strDel;
		strDel.sprintf("drop table %s", S_TABLENAME);

		if(!query.exec(strDel))
		{
			std::cout << "can't delete table" << std::endl;
			std::cout << query.lastError().text().toStdString() << std::endl;
		}
		else
		{
			std::cout << "table deleted" << std::endl;
			if(!query.exec(strRequest))
				std::cout << "create error" << std::endl;
		}
	}

	for(int i = 1; i <= 200; i++)
	{
		QString	strTr = QString::number(i);

		strRequest.sprintf("insert into %s values"
							"(%d, \'%s\', \'%s\', \'%s\', \'%s\', "
							"\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')",
						 S_TABLENAME, i,
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str(),
						 strTr.toStdString().c_str()
						 );

		if(!query.exec(strRequest))
		{
			std::cout << "write error" << std::endl;
			std::cout << query.lastError().text().toStdString() << std::endl;
		}
	}

	strRequest.sprintf("select max(title) from literature"/*, S_ID, S_TABLENAME*/);
	if(!query.exec(strRequest))
	{
		std::cout << "write error" << std::endl;
		std::cout << query.lastError().text().toStdString() << std::endl;
	}

	if(query.isValid())
	{
		std::cout << "query valid" << std::endl;
	}

	query.next();	//	не забываем переключать на следующий ответ

	QVariant	var = query.value(0);
	//int	id = query.value(0).toInt();
	int	id;
	if(var.isValid())
	{
		id = var.toInt();
	}
	std::cout << "id = " << id << std::endl;

	db.close();
	
	std::cout << "%SUITE_FINISHED% time=0" << std::endl;

	QWidget	wgt;
	wgt.show();

	return app.exec();
}
